package com.kklsqm.langchain4j.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

/**
 * 功能: WebSocket配置类
 * 作者: 沙琪马
 * 日期: 2025/6/3 16:23
 */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 设置消息代理的前缀，即如果消息的前缀是"/topic"，就会将消息转发给消息代理（broker）
        // 再由消息代理将消息广播给当前连接的客户端
        config.enableSimpleBroker("/topic");
        // 配置一个或多个前缀，通过这些前缀过滤出需要被注解方法处理的消息
        // 例如"/app"前缀的destination可以通过@MessageMapping注解的方法处理
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 定义一个前缀为"/ws"的endpoint，并开启sockjs支持
        // sockjs可以解决浏览器对WebSocket的兼容性问题
        registry.addEndpoint("/ws")
                .setAllowedOriginPatterns("*")
                .withSockJS(); // 开启SockJS支持
    }
}
